Skip to content

如何实现一个 plugin 插件

webpack-plugin

  • 基于 tapable 扩展出的,事件广播
  • 插件 time-webpack-plugin
js
class TimePlugin {
  constructor() {
    console.time("time");
  }
  apply(compiler) {
    compiler.hooks.afterEmit.tapAsync("TimePlugin", (compilation, callback) => {
      console.timeEnd("time");
      callback();
    });
  }
}

module.exports = TimePlugin;
  • 配置文件
js
const TimePlugin = require("./time.webpack");
// ....
config.plugins.push(new TimePlugin());
js
let compiler = new Compiler({});
// 加载插件
if (options.plugins && Array.isArray(options.plugins)) {
  for (const plugin of options.plugins) {
    plugin.apply(compiler);
  }
}

在 MIT 许可下发布